package creational_pattern.singleton;

/**
 * 懒汉模式：
 *      线程不安全
 */

public class Singleton3 {

    // 1. 私有的构造方法
    private Singleton3() {}

    // 2. 类中声明对象 不进行赋值
    private static Singleton3 instance;


    // 3. 提供一个公共的访问对象的方式
    public static Singleton3 getInstance() {
        // 判断是否已经创建过
        if(instance == null) {
            // 首次调用时创建对象
            instance = new Singleton3();
        }
        return instance;
    }

    // 加锁 —— 线程安全
    // 存在的问题：绝大部分都是读操作，没必要让每个线程都持有锁才能调用方法，否则性能很差
    public static synchronized Singleton3 getInstance2() {
        // 判断是否已经创建过
        if(instance == null) {
            // 首次调用时创建对象
            instance = new Singleton3();
        }
        return instance;
    }

}
